package com.example.mails;

import com.example.utils.BasicUtils;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

import java.io.File;

/**
 * 用于发送带附件的电子邮件的类
 */
public class FileMail {
    /**
     * 发送带附件的邮件
     *
     * @param title    邮件主题
     * @param content  邮件内容
     * @param sender   发件人邮箱
     * @param password 发件人邮箱密码
     * @param toEmail  收件人邮箱数组
     * @param csEmail  抄送人邮箱数组
     * @param aPath    附件文件路径
     */
    public static void sendEmailFiles(String title, String content, String sender, String password, String[] toEmail,
                                      String[] csEmail, String aPath) {

        // 检查附件文件路径是否为空，如果为空则抛出异常
        if (BasicUtils.isEmptys(aPath) != false) {
            try {
                throw new Exception("请设置附件文件路径");
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        // 创建文件对象，用于获取附件信息
        File file = new File(aPath);

        // 创建邮件对象
        MultiPartEmail email = new MultiPartEmail();
        try {
            // 设置邮件的基本属性
            email.setHostName("smtp.yeah.net"); // 设置SMTP服务器
            email.setAuthentication(sender, password); // 设置发件人邮箱和密码
            email.setCharset("UTF-8"); // 设置邮件编码

            // 设置发件人邮箱
            email.setFrom(sender);

            // 检查收件人邮箱地址数组是否为空，如果不为空则设置收件人，如果为空则抛出异常
            if (BasicUtils.isEmptys(toEmail) != false) {
                email.addTo(toEmail);
                try {
                    throw new Exception("请设置收件人邮箱地址");
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            // 检查抄送人邮箱地址数组是否为空，如果不为空则设置抄送人，如果为空则抛出异常
            if (BasicUtils.isEmptys(csEmail) != false) {
                email.addCc(toEmail);
                try {
                    throw new Exception("请设置抄送人邮箱地址");
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }

            // 设置邮件主题和内容
            email.setSubject(title);
            email.setMsg(content);

            // 创建邮件附件
            EmailAttachment attachment = new EmailAttachment();
            attachment.setPath(aPath); // 设置附件文件的路径
            attachment.setDisposition(EmailAttachment.ATTACHMENT);
            attachment.setDescription("文件描述"); // 设置附件描述
            attachment.setName(file.getName()); // 设置附件显示名称

            // 将附件添加到邮件中
            email.attach(attachment);

            // 发送邮件
            email.send();
            System.out.println("邮件发送成功！");
        } catch (EmailException e) {
            e.printStackTrace();
            System.out.println("邮件发送失败！");
        }
    }
}

